home *** CD-ROM | disk | FTP | other *** search
- 10 'DUNEND - END THE QUEST AND UPDATE THE FILES
- 20 DEFINT A-Z
- 30 P.TOT = 0
- 40 FOR PX = 1 TO 9
- 50 IF P.NAME$(PX)="" THEN P.TOT=P.TOT+1: GOTO 70
- 60 IF P(PX,7) < 3 THEN P.TOT=P.TOT+1
- 70 NEXT PX
- 80 IF P.TOT < 9 THEN MSG$="YOU WERE NOT ALL OUT OF THE DUNGEON": EXPR!=0: GP!=0: GOSUB 250
- 90 IF TIMER < SV.TIMER! THEN GOTO 90 'WAIT
- 100 CLS
- 110 P.TOT=0
- 120 FOR P = 1 TO 9
- 130 IF P.NAME$(P) <> "" THEN P.TOT = P.TOT + 1
- 140 NEXT
- 150 IF P.TOT = 0 THEN EARNED.EXPR!=0 ELSE EARNED.EXPR! = INT(EXPR!/P.TOT)
- 160 FOR P = 1 TO 9
- 170 GOSUB 330 'UPDATE THE FILES
- 180 NEXT P
- 190 GOSUB 1460 'UPDATE SUPPLIES
- 200 IF TIMER < SV.TIMER! THEN GOTO 200
- 210 CLS: PRINT "PLAY AGAIN?"
- 220 GOSUB 1700
- 230 IF REPLY$ = "Y" THEN CLS: PRINT "PLEASE STAND BY": RUN "DUNQUEST"
- 240 PRINT "CLOSING FILES": CLOSE: CHAIN "MENU",1000
- 250 'MESSAGE
- 260 IF TIMER < SV.TIMER! THEN GOTO 260
- 270 MS$=SPACE$(39)
- 280 LSET MS$=MSG$
- 290 LOCATE 25,1
- 300 PRINT MS$;
- 310 SV.TIMER!=TIMER+1
- 320 RETURN
- 330 ' UPDATE THE FILES
- 340 IF P.NAME$(P) = "" AND P(P,4) = 0 THEN GOTO 1450 'DIDN'T PLAY
- 350 GET #1,P
- 360 PRINT P.NAME$(P)
- 370 IF P.NAME$(P) = "" THEN LSET NM$ = SPACE$(24): GOTO 1440
- 380 'PUT AWAY ITEMS THAT WERE IN PLAYERS HANDS
- 390 S=P(P,8): IF S <> 0 THEN S(S,P+2) = S(S,P+2)+1
- 400 S=P(P,9): IF S <> 0 THEN S(S,P+2) = S(S,P+2)+1
- 410 ' UPDATE EXPERIENCE POINTS
- 420 BONUS!=0
- 430 IF CLAS$="CLERIC " THEN PRIME=CVI(WIS$)
- 440 IF CLAS$="DWARF " THEN PRIME=CVI(STRN$)
- 450 IF CLAS$="ELF " THEN PRIME=INT((CVI(STRN$)+CVI(INTL$))/2)
- 460 IF CLAS$="FIGHTER " THEN PRIME=CVI(STRN$)
- 470 IF CLAS$="HALFLING " THEN PRIME=INT((CVI(STRN$)+CVI(DEX$))/2)
- 480 IF CLAS$="MAGIC-USER" THEN PRIME=CVI(INTL$)
- 490 IF CLAS$="THIEF " THEN PRIME=CVI(DEX$)
- 500 WK=INT((PRIME-2)/3)
- 510 BONUS!=(WK-3)*.1
- 520 BONUS!=BONUS!*EARNED.EXPR!
- 530 EXPR!=INT(EARNED.EXPR!+BONUS!)
- 540 PRINT "YOU EARNED ";EXPR!;" EXPERIENCE POINTS"
- 550 LSET EXPR$ = MKS$(CVS(EXPR$) + EXPR!)
- 560 ' CHECK IF PROMOTED
- 570 ZZ=CVI(LVL$)
- 580 IF ZZ=1 THEN WK!=500: GOTO 610
- 590 WK!=2000
- 600 FOR MX = 2 TO ZZ: WK!=WK!+WK!: NEXT
- 610 IF CVS(EXPR$) < WK! THEN GOTO 1330
- 620 IF CVI(LVL$)=9 THEN GOTO 650
- 630 IF ZZ=6 AND P.CLASS$="ELF " THEN GOTO 1250
- 640 GOTO 730 'PROMOTED
- 650 ' CHECK FOR TERMINATION OF PLAYER
- 660 ROLL = INT(RND*5)+1
- 670 IF ROLL <> 5 THEN GOTO 1250
- 680 MSG$="THE VALKYRIES HAVE CHOSEN " + P.NAME$(P)
- 690 IF CLAS$="ELF " THEN MSG$=P.NAME$(P)+" HAS GONE TO THE GREY HAVENS"
- 700 IF CLAS$="CLERIC " THEN MSG$="THE GODS HAVE CALLED " + P.NAME$(P)
- 705 GOSUB 250 'PRINT MSG
- 710 P.NAME$=(P)="": LSET NM$= SPACE$(24):
- 720 GOTO 1440
- 730 ' PROMOTED
- 740 PRINT "CONGRADULATIONS ";P.NAME$(P)
- 750 LSET LVL$ = MKI$(CVI(LVL$)+1)
- 760 IF CVI(LVL$)=3 OR CVI(LVL$)=6 OR CVI(LVL$)=9 THEN GOTO 770 ELSE GOTO 810
- 770 IF CVI(SV.POISON$) > 2 THEN LSET SV.POISON$=MKI$(CVI(SV.POISON$)-2):
- 780 IF CVI(SV.STONE$) > 2 THEN LSET SV.STONE$=MKI$(CVI(SV.STONE$)-2):
- 790 IF CVI(SV.DRAG$) > 2 THEN LSET SV.DRAG$=MKI$(CVI(SV.DRAG$)-2):
- 800 IF CVI(SV.MAGIC$) > 2 THEN LSET SV.MAGIC$=MKI$(CVI(SV.MAGIC$)-2):
- 810 'GET TITLE
- 820 IF CLAS$ = "MAGIC-USER" THEN GOTO 940
- 830 IF CLAS$ = "THIEF " THEN GOTO 1040
- 840 IF CLAS$ = "CLERIC " THEN GOTO 1140
- 850 IF CVI(LVL$)=2 THEN MSG$="LEGIONNAIRE "+CLAS$
- 860 IF CVI(LVL$)=3 THEN MSG$="VETERAN "+CLAS$
- 870 IF CVI(LVL$)=4 THEN MSG$="WARRIOR "+CLAS$
- 880 IF CVI(LVL$)=5 THEN MSG$="HERO "+CLAS$
- 890 IF CVI(LVL$)=6 THEN MSG$="SWORDMASTER "+CLAS$
- 900 IF CVI(LVL$)=7 THEN MSG$="CHAMPION "+CLAS$
- 910 IF CVI(LVL$)=8 THEN MSG$="GRANDMASTER "+CLAS$
- 920 IF CVI(LVL$)=9 THEN MSG$="LORD "+CLAS$
- 930 GOTO 1240
- 940 ' MAGIC USERS TITLES
- 950 IF CVI(LVL$)=2 THEN MSG$="MEDIUM "
- 960 IF CVI(LVL$)=3 THEN MSG$="SEER "
- 970 IF CVI(LVL$)=4 THEN MSG$="CONJUROR "
- 980 IF CVI(LVL$)=5 THEN MSG$="ENCHANTER "
- 990 IF CVI(LVL$)=6 THEN MSG$="WARLOCK/WITCH "
- 1000 IF CVI(LVL$)=7 THEN MSG$="SORCEROR "
- 1010 IF CVI(LVL$)=8 THEN MSG$="NECROMANCER "
- 1020 IF CVI(LVL$)=9 THEN MSG$="WIZARD "
- 1030 GOTO 1240
- 1040 ' THIEVES TITLES
- 1050 IF CVI(LVL$)=2 THEN MSG$="APPRENTICE "
- 1060 IF CVI(LVL$)=3 THEN MSG$="FOOTPAD "
- 1070 IF CVI(LVL$)=4 THEN MSG$="ROBBER "
- 1080 IF CVI(LVL$)=5 THEN MSG$="BURGLAR "
- 1090 IF CVI(LVL$)=6 THEN MSG$="CUTPURSE "
- 1100 IF CVI(LVL$)=7 THEN MSG$="SHARPER "
- 1110 IF CVI(LVL$)=8 THEN MSG$="MASTER THIEF "
- 1120 IF CVI(LVL$)=9 THEN MSG$="GRANDMASTER THIEF "
- 1130 GOTO 1240
- 1140 ' CLERICS TITLES
- 1150 IF CVI(LVL$)=2 THEN MSG$="ACOLYTE "
- 1160 IF CVI(LVL$)=3 THEN MSG$="ADEPT "
- 1170 IF CVI(LVL$)=4 THEN MSG$="PRIEST/PRIESTESS "
- 1180 IF CVI(LVL$)=5 THEN MSG$="VICAR "
- 1190 IF CVI(LVL$)=6 THEN MSG$="CURATE "
- 1200 IF CVI(LVL$)=7 THEN MSG$="ELDER "
- 1210 IF CVI(LVL$)=8 THEN MSG$="BISHOP "
- 1220 IF CVI(LVL$)=9 THEN MSG$="HIGH PRIEST/PRIESTESS "
- 1230 GOTO 1240
- 1240 PRINT "YOU ARE PROMOTED TO ";MSG$;" ";" LEVEL ";CVI(LVL$)
- 1250 IF P.CLASS$(P) = "CLERIC " THEN WK=6
- 1260 IF P.CLASS$(P) = "DWARF " THEN WK=8
- 1270 IF P.CLASS$(P) = "ELF " THEN WK=6
- 1280 IF P.CLASS$(P) = "FIGHTER " THEN WK=8
- 1290 IF P.CLASS$(P) = "HALFLING " THEN WK=6
- 1300 IF P.CLASS$(P) = "MAGIC-USER" THEN WK=4
- 1310 IF P.CLASS$(P) = "THIEF " THEN WK=4
- 1320 LSET HIT$=MKI$((CVI(HIT$))+INT(RND*WK)+1)
- 1330 'UPDATE MONEY
- 1340 MONEY!=INT(GP!/P.TOT)
- 1350 PRINT "YOU ACQUIRED ";MONEY!;" GOLD PIECES "
- 1360 IF (CLAS$ = "MAGIC-USER" OR CLAS$ = "ELF ") THEN MAX! = 3 ELSE LET MAX = 9
- 1370 MIN = 1
- 1380 TAX!=INT(RND*MAX)+MIN
- 1390 TAX!=TAX!/10
- 1400 TAX!=INT(TAX!*MONEY!)
- 1410 IF CLAS$="CLERIC " THEN PRINT "YOU DONATE ";TAX!;" TO THE GODS" ELSE PRINT "LOCAL AUTHORITIES TAX YOU ";TAX!
- 1420 MONEY!=MONEY!-TAX!
- 1430 LSET MONEY$=MKS$(CVS(MONEY$)+MONEY!)
- 1440 PUT #1,P
- 1450 RETURN
- 1460 'UPDATE SUPPLIES
- 1470 LET S=0
- 1480 LOCATE 25,1: PRINT "PLEASE STAND BY WHILE FILES ARE UPDATED";
- 1490 'GO THRU FILE
- 1500 S=S+1
- 1510 GET #2,S
- 1520 IF SID$ <> "DS" THEN GOTO 1690 ' END OF FILE
- 1530 FOR P = 1 TO 9
- 1540 IF P.NAME$(P) = "" AND P(P,4) = 0 THEN GOTO 1660
- 1550 IF P.NAME$(P) = "" THEN S(S,P+2) = 0
- 1560 ON P GOTO 1570,1580,1590,1600,1610,1620,1630,1640,1650
- 1570 LSET P1$ = MKI$(S(S,P+2)): GOTO 1660
- 1580 LSET P2$ = MKI$(S(S,P+2)): GOTO 1660
- 1590 LSET P3$ = MKI$(S(S,P+2)): GOTO 1660
- 1600 LSET P4$ = MKI$(S(S,P+2)): GOTO 1660
- 1610 LSET P5$ = MKI$(S(S,P+2)): GOTO 1660
- 1620 LSET P6$ = MKI$(S(S,P+2)): GOTO 1660
- 1630 LSET P7$ = MKI$(S(S,P+2)): GOTO 1660
- 1640 LSET P8$ = MKI$(S(S,P+2)): GOTO 1660
- 1650 LSET P9$ = MKI$(S(S,P+2)): GOTO 1660
- 1660 NEXT P
- 1670 PUT #2,S
- 1680 GOTO 1490
- 1690 RETURN
- 1700 'GET A REPLY
- 1710 DEF SEG=0: POKE 1050,PEEK(1052) 'CLEAR KEYBOARD BUFFER
- 1720 REPLY$=INKEY$: IF REPLY$="" THEN GOTO 1720
- 1730 IF LEN(REPLY$)=1 THEN GOTO 1790
- 1740 REPLY$=RIGHT$(REPLY$,1)
- 1750 IF ASC(REPLY$)=72 THEN REPLY$=CHR$(30): GOTO 1790
- 1760 IF ASC(REPLY$)=80 THEN REPLY$=CHR$(31): GOTO 1790
- 1770 IF ASC(REPLY$)=77 THEN REPLY$=CHR$(28): GOTO 1790
- 1780 IF ASC(REPLY$)=75 THEN REPLY$=CHR$(29)
- 1790 RETURN
-